#!/bin/bash

# ================================================
# Fedora 开发环境一键安装脚本
# 作者：AI助手
# 支持：前端、后端、Python、Go、Rust、Java、C/C++、Docker、Git、VS Code
# 硬件适配：AMD 6800H + Radeon 680M
# 使用方法：chmod +x fedora-dev-setup.sh && sudo ./fedora-dev-setup.sh
# ================================================

# ~ 是给“人”用的快捷方式，$HOME 是给“脚本”用的标准变量。
# 在日常使用中两者几乎等价，但在脚本中 优先使用 $HOME 更安全、更专业。 
# 日常命令行使用：用 ~		编写脚本时：用 $HOME
echo "🚀 开始安装 Fedora 开发环境..."
echo "ℹ️ 请确保已联网，且系统为最新状态。"

# ============================
# 第一步：更新系统（确保基础环境最新）
# ============================
echo "🔄 更新系统..."
sudo dnf update --refresh -y && sudo flatpak update -y


# ============================
# 第二步：安装基础开发工具
# ============================
echo "🛠️ 安装基础开发工具（编译器、构建工具、调试器）..."
# development-tools 是一个预定义的软件包组，包含一组常用的开发工具和库，用于支持软件开发工作。例如：git
# c-development 是简化C开发环境配置的包组，安装后即可获得编译、调试和构建C程序所需的核心工具。如果你需要开发C程序，安装它或对应的包组是第一步。例如：gcc、gcc-c++
# rpm-development-tools	是专门用于 RPM 包开发 的工具集，适合软件打包、维护或发布 RPM 格式的软件。例如：rpm-build、rpmdevtools
# multimedia 包组提供了一套完整的音视频处理工具链，适合普通用户或开发者处理多媒体任务。例如：gstreamer1-plugin-*
sudo dnf group install -y development-tools c-development rpm-development-tools multimedia
# dnf group install 旨在为开发者提供一个基础的开发环境，而无需手动安装每个工具。
# dnf group list			# 查看可用的软件包组
# dnf group info development-tools	# 查看软件包组的信息
# dnf group info c-development		# 查看软件包组的信息

# 安装 Tauri 2 运行环境依赖包	https://v2.tauri.app/zh-cn/start/prerequisites/#linux
sudo dnf check-update
sudo dnf install webkit2gtk4.1-devel \
  openssl-devel \
  curl \
  wget \
  file \
  libappindicator-gtk3-devel \
  librsvg2-devel \
  libxdo-devel


# ============================
# 第三步：安装 Git 并配置基础信息
# ============================
echo "📦 安装 Git..."
sudo dnf install -y git
git config --global user.name "龙茶清欢"
git config --global user.email "2320391937@qq.com"

# 提示用户配置 Git（不强制）
echo "📌 请在安装完成后运行以下命令配置 Git（可选）："
echo "   git config --global user.name '你的名字'"
echo "   git config --global user.email '你的邮箱'"
# 配置 Git
# git config --global user.name "龙茶清欢"
# git config --global user.email "2320391937@qq.com"
# ssh-keygen -t rsa -b 4096 -C "2320391937@qq.com"
# 需要安装 wl-clipboard 工具
# cat ~/.ssh/id_rsa.pub | wl-copy
# 配置 Gitee 密钥	https://gitee.com/profile/sshkeys
# 配置 Github 密钥	https://github.com/settings/keys
# git add . && git commit -m 'backup' && git push




# 市面上主流 web 框架的 Benchmark 性能测试网站 https://www.techempower.com/benchmarks


# ============================
# 第四步：安装 Python 开发环境
# ============================
echo "🐍 安装 Python 开发环境..."
# python3-pip 是 Python 的官方包管理工具（pip）的安装包，用于在系统中安装、升级、卸载 Python 第三方库（模块）
# pip 对 Python，就像 npm 对 JavaScript，cargo 对 Rust。 
sudo dnf install -y python3 python3-pip
echo "🐍 你刚安装的 python3 版本号为：$(python3 --version)"
echo "🐍 你刚安装的 python3-pip 版本号为：$(pip3 --version)"
# 升级 pip
pip3 install --upgrade pip


# ============================
# 第五步：安装 Node.js（LTS 版本）
# ============================
echo "🌐 安装 Node.js（LTS）..."
sudo dnf install -y nodejs
echo "🐍 你刚安装的 nodejs 版本号为：$(node -v)"
echo "🐍 你刚安装的 npm 版本号为：$(npm -v)"
# npm config --help
# npm config list
# 最新地址 淘宝 NPM 镜像站喊你切换新域名啦!
npm config set registry https://registry.npmmirror.com
# 安装 Bun
sudo npm install -g bun
echo "🐍 你刚安装的 bun 版本号为：$(bun --version)"
# bun run config --help
# bun --config
# 将 bunfig.toml 作为隐藏文件添加到用户主目录 https://www.bunjs.cn/docs/runtime/bunfig
echo '[install]
# 使用阿里云加速仓库，仓库地址可从阿里云官方获取，地址为 https://developer.aliyun.com/mirror/NPM
registry = "https://registry.npmmirror.com"
' >> ~/.bunfig.toml
# which node
# whereis node
# whereis bun
# 将 IDEA 的 JS/TS 默认运行时环境从 nodejs 改为 bun 操作如下：
# 1、设置 -> 语言和框架 -> Bun -> /usr/local/bin/bun
# 2、设置 -> 语言和框架 -> Node.js -> Node解释器 -> /usr/local/bin/bun


# ============================
# 第六步：安装 Go 语言
# ============================
echo "🐹 安装 Go 语言..."
# 安装 golang	https://learnku.com/go/wikis/38122
# golang 中文学习文档 https://golang.halfiisland.com/
# golang 官方网站 https://golang.google.cn/
# golang 公共软件包仓库 https://pkg.go.dev/
sudo dnf install -y golang
echo "🐍 你刚安装的 golang 版本号为：$(go version)"
# 启用 Go Modules 功能
go env -w GO111MODULE=on
go env -w GOSUMDB=sum.golang.google.cn
# 阿里云
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
# 查看配置是否成功
# go env | grep GOPROXY
# 设置 GOPATH 为 ~/go
mkdir -p $HOME/.go
go env -w GOPATH=$HOME/.go
# 查看当前环境
# go env GOPATH GOMODCACHE


# ============================
# 第七步：安装 Rust
# ============================
echo "🦀 安装 Rust..."
# 配置 rustup 使用中国科学技术大学（USTC）的镜像源，从而 加速 Rust 工具链（如 rustc、cargo）的下载和更新。
# 配置 Rust Toolchain 反向代理 	https://mirrors.ustc.edu.cn/help/rust-static.html
# 指定 Rust 工具链和组件的下载地址（如 rustc,cargo,rust-std 等）
echo 'export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static' >> ~/.bash_profile
# 指定 rustup 自身更新元数据的地址（即 rustup 如何检查自身版本、下载新版本）
echo 'export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup' >> ~/.bash_profile
source ~/.bash_profile
# 用 shell 执行从标准输入来的脚本，并把 -y 作为参数传给那个脚本，告诉它：自动安装，不要问我！”
# “自动确认所有提示，使用默认设置安装”（相当于 “yes”）
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
# 激活 Rust 环境
source "$HOME/.cargo/env"
# rustup update
# Rust Web 常用的框架 Axum 目前排名性能总榜 7，需要使用 pg 数据库，数据来自性能测试网站 https://www.techempower.com/benchmarks 
#  配置 Cargo 国内加速镜像源
# 配置 Rust Crates Registry 源	 https://mirrors.ustc.edu.cn/help/crates.io-index.html
# 如果正在使用 cargo 1.68 及以上版本，在 $HOME/.cargo/config.toml 中添加如下内容即可：
mkdir -p ~/.cargo && cat >> ~/.cargo/config.toml << 'EOF'
# 配置 Cargo 国内加速镜像源，可选：ustc、tuna、sjtu、aliyun
[source.crates-io]
replace-with = 'ustc'

# 中国科学技术大学镜像 https://mirrors.ustc.edu.cn/help/crates.io-index.html
[source.ustc]
registry = "sparse+https://mirrors.ustc.edu.cn/crates.io-index/"
[registries.ustc]
index = "sparse+https://mirrors.ustc.edu.cn/crates.io-index/"

# 阿里云镜像
# 使用稀疏协议（sparse）减少元数据下载量，大幅加速
[source.aliyun]
registry = "sparse+https://mirrors.aliyun.com/crates.io-index/"
[registries.aliyun]
index = "sparse+https://mirrors.aliyun.com/crates.io-index/"
EOF

# cat ~/.cargo/config.toml

# 验证安装
echo "🐍 你刚安装的 rust 版本号为：$(rustc --version)"
echo "🐍 你刚安装的 cargo 版本号为：$(cargo --version)"


# ============================
# 第八步：安装 Java（OpenJDK 21 LTS）
# ============================
echo "☕ 安装 sdkman ..."
# 安装 SDKMAN  https://sdkman.java.net.cn/install/
# echo "安装SDKMAN..."
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
echo "🐍 你刚安装的 sdkman 版本号为：$(sdk version)"
# sdk list java
# sdk uninstall java 24.0.2-graal
# 默认安装 Temurin(Eclipse) 的最新稳定版 Java，例如：21.0.8-tem
sdk install java
sdk install java 24.0.2-graal
# sdk default java 21.0.8-tem
# Java Web 最快的框架是 vertx 需要使用 pg 数据库，目前排名总榜 13，远远高于基于 Spring 的一系列框架，数据来自性能测试网站 https://www.techempower.com/benchmarks 
# vertx 官网为 https://vertx.io/docs/vertx-pg-client/java/
# 我们可以通过在官方提供的脚手架 https://start.vertx.io/ 项目创建网站来创建一个 vertx 项目
echo "🐍 你刚安装的 java 版本号为：$(java --version)"
# 安装 maven/mvnd
sdk install maven
echo "🐍 你刚安装的 maven 版本号为：$(mvn --version)"
# mvnd 是 Apache Maven 的一个，由 Gradle 团队主导开发，目标是大幅提升 Maven 的构建速度。
sdk install mvnd
echo "🐍 你刚安装的 mvnd 版本号为：$(mvnd --version)"
# 安装 Kotlin，他 是一种静态类型编程语言，安卓开发必须搭配 gradle
sdk install kotlin
echo "🐍 你刚安装的 kotlin 版本号为：$(kotlin --version)"
sdk install gradle
echo "🐍 你刚安装的 gradle 版本号为：$(gradle --version)"
# 查看所有已安装的候选正在使用的版本
sdk current
# 刷新 SDKMAN 候选数据库，并检查已安装的候选有哪些可以升级
# sdk update && sdk upgrade
# SDKMAN 自我更新，如果可用，则安装 SDKMAN！的新版本。
# sdk selfupdate
# sdk offline enable
# sdk offline disable
# 查看环境变量配置，通过 sdkman 安装的所有候选都会自动配置环境变量，用户不需要自己再额外配置
# echo $PATH
# 可以通过将 PATH 中的冒号 : 替换为换行符，让 echo $PATH 的输出变成分行显示。
echo "$PATH" | tr ':' '\n'

# cat ~/.m2/settings.xml
# 配置 Maven 国内加速镜像
mkdir -p ~/.m2 && cat > ~/.m2/settings.xml << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!--
    Maven 的 settings.xml 配置文件说明：中文官方文档 https://maven.org.cn/settings.html
    - 该文件位于用户目录下的 ~/.m2/settings.xml，是全局配置（优先级高于全局配置 /etc/maven/settings.xml）
    - 主要用于自定义仓库镜像、本地仓库路径、构建参数等
    Maven 配置文件：支持阿里云效制品仓库（含认证）
    适用于：国内加速 + 发布构件到私有仓库
-->

<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">

    <!-- ======================================================================= -->
    <!-- 服务器认证配置（关键！用于发布构件到阿里云效）                             -->
    <!-- 必须添加 <server>，ID 要与你在 pom.xml 中的 <distributionManagement> 匹配 -->
    <!-- ======================================================================= -->
    <servers>
        <!-- 示例：配置阿里云制品仓库的认证（用于 mvn deploy） -->
<!--        <server>-->
<!--            <id>cloud-artifact</id>         &lt;!&ndash; 必须与 pom.xml 中的 repository ID 一致 &ndash;&gt;-->
<!--            <username>你的阿里云账号邮箱或主账号ID</username>-->
<!--            <password>你的访问令牌（Access Token）</password>-->
<!--        </server>-->
        <!-- 可选：如果使用 SSH 或私有镜像仓库，也可配置多个 server -->

        <server>
            <id>2330291-release-Ikhm5V</id>
            <username>63e87861c30a398c5d2fb9f2</username>
            <password>fkl(OH4pCTT4</password>
        </server>
    </servers>


    <!-- ======================================================================= -->
    <!-- 镜像配置（Mirrors）配置参考阿里云官网 https://maven.aliyun.com/mvn/guide     -->
    <!-- 用于加速依赖下载，将中央仓库的请求重定向到更快的镜像站点（如阿里云、华为云）         -->
    <!-- 注意：mirrorOf 的值为 'central' 表示只代理 Maven 中央仓库                    -->
    <!-- 镜像配置（推荐方式）：全局代理 Central 和其他常见仓库                          -->
    <!-- 比直接写在 profile 中的 repositories 更高效、更安全                          -->
    <!-- ======================================================================= -->
    <mirrors>
        <!-- 阿里云 Maven 镜像（推荐国内用户使用） -->
        <mirror>
            <id>aliyunmaven</id>                    <!-- 镜像唯一标识 -->
            <mirrorOf>*</mirrorOf>                  <!-- 代理所有仓库，也可以选择只代理 central 仓库，只需将 * 改为 central 即可 -->
            <name>阿里云公共仓库</name>                <!-- 镜像名称（可读性） -->
            <url>https://maven.aliyun.com/repository/public</url>    <!-- 镜像地址 -->
        </mirror>

        <!-- 腾讯云 Maven 镜像（备选）参考腾讯云官网 https://mirrors.cloud.tencent.com/help/maven.html -->
        <mirror>
            <id>nexus-tencentyun</id>
            <mirrorOf>*</mirrorOf>
            <name>Nexus tencentyun</name>
            <url>http://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url>
      </mirror> 
    </mirrors>

    <!-- ======================================================================= -->
    <!-- 本地仓库路径（Local Repository）默认: ${user.home}/.m2/repository       -->
    <!-- Maven 下载的依赖包将存储在此目录中，默认是 ~/.m2/repository                -->
    <!-- 可以修改路径以节省系统盘空间，例如指向其他磁盘                            -->
    <!-- ======================================================================= -->
    <localRepository>${user.home}/.m2/repository</localRepository>

    <!-- ======================================================================= -->
    <!-- 构建配置（Profiles）                                                     -->
    <!-- 定义一组构建时的默认行为，例如 Java 版本、编码等                          -->
    <!-- 这里设置默认使用 Java 21 编译项目                                         -->
    <!-- 如果你使用 Java 8 或 17，请修改 <jdk> 和编译器版本                         -->
    <!-- ======================================================================= -->
    <profiles>
        <!-- JDK-21配置 -->
        <profile>
            <!-- 该配置的唯一标识符，便于指定激活。配置名称可以任取，例如也可以是：dev、prod、test 等等 -->
            <id>jdk-21</id>
            <!-- 激活条件：当 JDK 版本为 21 时自动激活，并且默认激活 -->
            <activation>
                <!-- 检测到 JDK 21 时激活 -->
                <jdk>21</jdk>
                <!-- 默认启用此 profile -->
                <activeByDefault>true</activeByDefault>
            </activation>
            <!-- 设置 Maven 编译插件的默认参数 -->
            <properties>
                <maven.compiler.source>21</maven.compiler.source>    <!-- 源代码兼容版本 -->
                <maven.compiler.target>21</maven.compiler.target>    <!-- 生成的字节码版本 -->
                <maven.compiler.release>21</maven.compiler.release>  <!-- Java 9+ 模块化编译选项 -->
                <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- 编码格式 -->
                <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            </properties>

            <repositories>
                <repository>
                    <id>spring</id>
                    <url>https://maven.aliyun.com/repository/spring</url>
                    <releases>
                      <enabled>true</enabled>
                    </releases>
                    <snapshots>
                      <enabled>false</enabled>
                    </snapshots>
                </repository>
            </repositories>

            <!-- =================================================================== -->
            <!-- 分发管理：指定构件发布到哪里（需与 servers.id 对应）                   -->
            <!-- 这部分通常写在 pom.xml 中，但也可以放在这里统一管理（不推荐）         -->
            <!-- 建议：把 distributionManagement 写在 pom.xml，server 写在 settings.xml -->
            <!-- =================================================================== -->
            <!--
            <distributionManagement>
                <repository>
                    <id>cloud-artifact</id>
                    <url>https://maven.aliyun.com/repository/your-repo-release</url>
                </repository>
                <snapshotRepository>
                    <id>cloud-artifact</id>
                    <url>https://maven.aliyun.com/repository/your-repo-snapshot</url>
                </snapshotRepository>
            </distributionManagement>
            -->
        </profile>

        <!-- 通过本指南快速设置仓库凭证，并完成制品文件的推送，配置参考云校官网 https://packages.aliyun.com/maven/2330291-release-Ikhm5V/guide -->
        <profile>
            <id>阿里云效-rdc</id>
            <activation>
                <activeByDefault>false</activeByDefault> <!-- 默认不启用 -->
            </activation>
            <properties>
                <altReleaseDeploymentRepository>
                    2330291-release-Ikhm5V::default::https://packages.aliyun.com/63e87870e2fd215b231d5e5b/maven/2330291-release-ikhm5v
                </altReleaseDeploymentRepository>
            </properties>

            <!-- 推荐放在项目的 pom.xml 中（而不是全局 settings.xml），因为：不影响其他项目，更易维护和版本控制（敏感信息仍需分离）-->
            <!-- 仅当必须时才在 settings.xml 或 pom.xml 中配置 repositories -->
            <!-- 该配置会出现在 Maven 项目的仓库列表中，格式为 aliyun https://maven.aliyun.com/repository/public -->
            <!-- 如果想使用其它代理仓库，可在<repositories></repositories>节点中加入对应的仓库使用地址。以使用 central 代理仓为例 -->
            <repositories>
                <!-- repository 用于存储和检索普通的 Maven 依赖构件 -->
                <!-- 还可以接着配置插件下载的仓库，如阿里云校 Maven 私有仓库，配置参考云校官网 https://packages.aliyun.com/maven/2330291-release-Ikhm5V/guide -->
                <repository>
                    <id>2330291-release-Ikhm5V</id>
                    <url>https://packages.aliyun.com/maven/repository/2330291-release-Ikhm5V</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                </repository>
            </repositories>
        </profile>

    </profiles>


    <!-- ======================================================================= -->
    <!-- 其他可选配置（未启用）                                                   -->
    <!-- 如需配置代理、服务器认证、仓库等，可在此添加                              -->
    <!-- 示例：https://maven.org.cn/settings.html                           -->
    <!-- ======================================================================= -->

</settings>
EOF

# cat ~/.gradle/init.d/mirror.gradle
# 配置 Gradle 国内加速镜像
mkdir -p ~/.gradle/init.d && cat > ~/.gradle/init.d/mirror.gradle << 'EOF'
// 全局配置（推荐）—— 所有项目自动加速
// 参考阿里云 https://maven.aliyun.com/mvn/guide
// 以及阿里云开发者文档 https://developer.aliyun.com/mirror/maven
allprojects {
    repositories {
    	// 优先使用阿里云镜像（Spring 官方仓库已包含在内）
        maven { url 'https://maven.aliyun.com/repository/public/' }
        maven { url 'https://maven.aliyun.com/repository/spring/'}
        // 设置阿里云效私有仓库的访问凭证，参考 https://packages.aliyun.com/maven/2330291-release-Ikhm5V/guide
        // 过本指南快速设置仓库凭证，并完成阿里云效制品文件的拉取
        maven {
            credentials {
                username '63e87861c30a398c5d2fb9f2'
                password 'fkl(OH4pCTT4'
            }
            url 'https://packages.aliyun.com/63e87870e2fd215b231d5e5b/maven/2330291-release-ikhm5v'
        }
        
	// 备用腾讯云镜像（阿里云故障时自动切换）
        maven { url "https://mirrors.cloud.tencent.com/nexus/repository/maven-public/" }
        maven { url "https://mirrors.cloud.tencent.com/nexus/repository/spring/" }
        
        // 最后尝试官方仓库（国内可能无法直连，速度很慢）
    	mavenLocal()
    	mavenCentral()
    }
}
EOF


# ============================
# 第九步：安装数据库
# ============================
echo "🗄️ 安装常用数据库..."
# 启动并启用 MariaDB（MySQL 兼容）
echo "🔧 是否启动 MariaDB 并设置密码？[y/N]"
read -r setup_mariadb
if [[ $setup_mariadb =~ ^[Yy]$ ]]; then
    sudo dnf install mariadb-server -y
    sudo systemctl enable mariadb --now
    # systemctl status mariadb
    sudo mysql_secure_installation
    echo "🐍 你刚安装的 mariadb 版本号为：$(mariadb --version)"
fi

# 启动 PostgreSQL（可选）
echo "🔧 是否启动 PostgreSQL？[y/N]"
read -r setup_postgres
if [[ $setup_postgres =~ ^[Yy]$ ]]; then
    sudo dnf install postgresql-server postgresql-contrib -y
    sudo postgresql-setup --initdb
    sudo systemctl enable postgresql --now
    # systemctl status postgresql
    sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '479368';"
    echo "🐍 你刚安装的 postgresql 版本号为：$(postgres --version)"
fi


# ============================
# 第十步：安装容器工具（Podman + Docker 兼容）
# ============================
echo "🐋 安装 Podman（Docker 兼容）..."
# podman 官方网站	https://desktop.podman.org.cn/
# Fedora 内置 podman，无需安装    https://podman.org.cn/docs/installation#fedora
# Podman 默认为无守护进程的 rootless 模式（普通用户直接操作）：
echo "🐍 Fedora 内置 podman 版本号为：$(podman --version)"
sudo dnf install -y podman podman-compose
echo "🐍 安装的 podman-compose 版本号为：$(podman-compose --version)"
# 主要用于 登录到容器镜像仓库（Registry），以便拉取（pull）私有镜像或推送（push）镜像到仓库。
# lcqh2635@gmail.com
# podman login
# 配置国内加速镜像仓库
# cat /etc/containers/registries.conf
# 备份到同目录（添加 .bak 后缀）
sudo cp /etc/containers/registries.conf{,.bak}
# 检查 .bak 文件是否存在
# ls -l /etc/containers
# 从同目录 .bak 文件恢复
# sudo cp /etc/containers/registries.conf{.bak,}

sudo bash -c 'cat <<EOF >> /etc/containers/registries.conf

# 定义未指定镜像仓库前缀时，默认搜索的镜像仓库列表
# 例如执行 "podman pull nginx" 会自动从 "docker.io" 查找 "library/nginx"
unqualified-search-registries = ["docker.io"]

# Podman 优先尝试从 registry.mirror 拉取镜像，如果加速器不可用/镜像不存在，则自动回退到 location 指定的官方地址
# 官方仓库地址（最终回退地址）
[[registry]]
# 匹配的镜像仓库前缀（支持通配符 *）
# 例如 "docker.io" 会匹配所有 "docker.io/xxx" 的镜像
prefix = "docker.io"
# 实际访问的仓库服务器地址
# Docker Hub 的官方注册表地址
location = "registry-1.docker.io"

# 镜像加速器地址（优先使用的镜像源）
# 添加该仓库的镜像加速器（Mirror）以阿里云镜像加速为示例
[[registry.mirror]]
# 镜像加速器地址（替换为你的阿里云镜像加速URL）
location = "docker.1ms.run"
# 是否允许不安全的 HTTP 连接（生产环境建议 false）
insecure = false
EOF'

# 启用系统级 socket
# 重启 podman 相关服务（如果使用了 API 服务）
sudo systemctl restart podman  # 仅当启用了 podman 服务时需执行
# Podman 本身是一个守护进程，但默认不自动启动。可以手动启用
sudo systemctl enable --now podman.service
# systemctl status podman

# 启用用户级 socket
systemctl --user enable --now podman.socket
systemctl --user status podman
# https://github.com/containers/podman/blob/cea9340242f3f6cf41f20fb0b6239aa3db5decd6/docs/tutorials/socket_activation.md
# cat /usr/lib/systemd/user/podman.socket
# ls $XDG_RUNTIME_DIR/podman/podman.sock
# unix:///run/user/1000/podman/podman.sock
# podman info
sudo flatpak install flathub -y \
com.github.marhkb.Pods \
io.podman_desktop.PodmanDesktop
# 打开 Pods 软件，点击 “新建连接” 然后选择使用默认的 “Unix Socket” 点击 Connect
# IDEA 连接 Podman：按 Ctrl+Alt+S 打开设置，然后选择 构建、执行、部署 | Docker。点击 "添加"按钮 以添加 Docker 配置。选择 Unix 套接字 ，然后下拉选择 rootless 版地址


# podman pull redis
# 后台运行 Nginx
# podman run -d --name redis_db -p 6379:6379 redis:latest
# 查看运行中的容器
# podman ps
# 查看所有容器（包括已停止的）
# podman ps -a
# podman stop redis_db
# 删除已经运行过，但现在是 stop 停止状态的容器实例，也就是删除 podman run 产生的容器实例。最原始下载的镜像依旧存在
# podman rm redis_db
# 删除最原始下载的镜像，也就是删除 podman pull redis 拉取的内容
# podman rmi redis
# 查看 Podman 系统服务（适用于 rootful 模式）
# systemctl status podman
# systemctl start podman
# Rootless 用户级 socket
# systemctl --user enable --now podman.socket
# podman run -d --name my_container --restart=always nginx
# podman pull debian:trixie-slim
# podman pull debian:stable-slim
# -it：分配一个交互式终端（-i 交互式，-t 伪终端）
# /bin/bash：启动容器后执行的命令（这里是启动 Bash Shell）
# podman run -it --name debian debian:trixie-slim /bin/bash


# 参考 fedora 官方文档 https://docs.fedoraproject.org/zh_Hans/quick-docs/virtualization-getting-started/
# dnf group install 默认只安装，比选和默认包，不会安装可选包。可通过参数 --with-optional 来一并安装可选包
sudo dnf group install -y --with-optional virtualization
# dnf group info virtualization
sudo systemctl start libvirtd
# https://github.com/containers/gvisor-tap-vsock/releases/download/v0.8.7/gvproxy-linux-amd64
# https://github.com/containers/podman/issues/21337
sudo dnf install -y podman-gvproxy
sudo dnf install -y virtiofsd
echo 'export PATH=$PATH:/usr/libexec' >> ~/.bash_profile
source ~/.bash_profile
# cat ~/.bash_profile

# IDEA 连接 Podman 教程，参考 jetbrains 官方文档 https://www.jetbrains.com/zh-cn/help/idea/podman.html
podman machine init --rootful=true
podman machine start
# export DOCKER_HOST='unix:///run/user/1000/podman/podman-machine-default-api.sock'
# 停止并删除 machine（可选）
podman machine stop
podman machine rm
podman machine list

# 打开 Pods 软件，点击 “新建连接” 然后选择使用 “Custom URL” 输入上面的生成的地址
# IDEA 连接 Podman：按 Ctrl + Alt + S 打开设置，然后选择 构建、执行、部署 | Docker。点击 "添加"按钮 以添加 Docker 配置。选择 TCP 套接字 ，然后在URL地址栏输入上面生成的地址 


# 在 Fedora 上使用 Kubernetes 官方文档 https://docs.fedoraproject.org/zh_Hans/quick-docs/using-kubernetes/
# Fedora 40（及更新版本）安装 Kubernetes 建议 https://docs.fedoraproject.org/zh_Hans/quick-docs/using-kubernetes-non-versioned/#sect-fedora-40-recommendations
# Kubelet 是节点上的 Kubernetes 运行时。对应 kubernetes 包
# Kubeadm 初始化集群并将新节点加入集群。这个rpm是可选的，但由Kubernetes团队推荐。如果使用，请在每个节点上安装。
# kubectl 命令行客户端。建议在任何配置为控制平面的节点上使用，因为它允许集群管理员从控制平面的SSH会话中对集群进行控制。在可以通过网络连接到集群的机器上安装。
# kubernetes-systemd 用于 Kubernetes 控制平面和/或节点的 Systemd 服务。对于大多数安装，不需要这些服务，因为 kubeadm 会将这些组件作为静态 Pod 安装。如果使用，则需要在所有节点上安装。使用 systemctl 在所有节点上启用 kube-proxy。在控制平面节点上启用 kube-apiserver、kube-controller-manager 和 kube-scheduler。
sudo dnf install -y kubernetes kubernetes-kubeadm kubernetes-client
# sudo dnf install -y kubernetes-systemd
# 查看 kubelet 服务状态
systemctl status kubelet
sudo systemctl enable --now kubelet
# kubelet 每个节点都在运行的服务，管理本节点上的所有 Pod 和容器
echo "🐍 你安装的 kubernetes 版本号为：$(kubelet --version)"
# Kubeadm 初始化集群并将新节点加入集群
echo "🐍 你安装的 kubernetes-kubeadm 版本号为：$(kubeadm version)"
# kubectl 是 Kubernetes 命令行客户端，由 kubernetes-client 包提供
echo "🐍 你安装的 k8s 命令行工具 kubectl 版本号为：$(kubectl version --client)"
# IDEA 添加 Kubernetes 集群，参考 jetbrains 官方文档 https://www.jetbrains.com/zh-cn/help/idea/kubernetes.html
# 在 设置 对话框（Ctrl + Alt + S ）中，选择 构建、执行、部署 | Kubernetes。测试好 kubectl（K8s 的命令行工具 CLI） 和 Helm（K8s 的“包管理器”） 
# 有关群集的信息存储在 kubeconfig 文件中。 IntelliJ IDEA 会检测默认的 kubeconfig 文件，这个文件通常位于 $HOME/.kube/config （此位置可以通过 KUBECONFIG 环境变量更改）。
mkdir -p $HOME/.kube/config




echo "✅ Podman 已安装，支持 docker 命令别名"


# ============================
# 第十一步：安装代码编辑器
# ============================
# 2. 安装 JetBrains 代码编辑器
# 启用 JetBrains 第三方优质用户库	https://copr.fedorainfracloud.org
# https://copr.fedorainfracloud.org/coprs/medzik/jetbrains/
sudo dnf copr enable medzik/jetbrains
# 安装 JetBrains 代码编辑器
sudo dnf install -y intellij-idea-ultimate
sudo dnf install -y goland webstorm rustrover datagrip pycharm-professional
# sudo dnf install -y clion
# sudo dnf install -y jetbrains-fleet

# 下载并安装 Android Studio
sudo dnf install -y android-studio
# 使用 Android Studio 中的 Android SDK 安装以下内容：
    # Android SDK Platform
    # Android SDK Platform-Tools
    # NDK (Side by side)
    # Android SDK Build-Tools
    # Android SDK Command-line Tools
# 配置 tauri 安卓 Android 所需的环境变量 https://tauri.app/zh-cn/start/prerequisites/#android
mkdir -p "$HOME/.Android/Sdk"
echo '
export ANDROID_HOME="$HOME/.Android/Sdk"
export NDK_HOME="$ANDROID_HOME/ndk/$(ls -1 $ANDROID_HOME/ndk)"
' >> ~/.bash_profile
source ~/.bash_profile
# cat ~/.bash_profile
# 使用 rustup 添加 Android 编译目标：
rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android
# 创建 tauri 项目
# bun create tauri-app
# 项目启动前操作
# cd tauri-app && bun install
# 如果此处失败了，请在 android-studio 中点击  setting -> 搜索 Android SDK
# bun run tauri android init
# 启动桌面应用程序
# bun run tauri dev
# 启动 android 安卓应用程序，在运行该命令之前必须先在 android-studio 中运行内嵌手机，否则执行会卡住没反映
# bun run tauri android dev
# bun run --bun tauri android build


# ============================
# 第十二步：安装调试与性能工具
# ============================
echo "📊 安装调试与性能分析工具..."
# 以下是 VPN 软件
# clash-verge-rev 免费节点	https://clashvergerev.cc/free-node/
# https://github.com/clash-verge-rev/clash-verge-rev/releases
# github 下载加速	https://gh-proxy.com/
# https://gh-proxy.com/https://github.com/clash-verge-rev/clash-verge-rev/releases/download/autobuild/Clash.Verge-2.4.0+autobuild.0805.44e8a03-1.x86_64.rpm
wget "https://gh-proxy.com/https://github.com/clash-verge-rev/clash-verge-rev/releases/download/autobuild/Clash.Verge-2.4.0+autobuild.0805.44e8a03-1.x86_64.rpm"
wget "https://cdn.gh-proxy.com/https://github.com/clash-verge-rev/clash-verge-rev/releases/download/autobuild/Clash.Verge-2.4.0+autobuild.0805.44e8a03-1.x86_64.rpm"


# ============================
# 第十四步：清理缓存，提升系统整洁度
# ============================
echo "🧹 清理安装缓存..."
sudo dnf clean all


# ============================
# 第十五步：提示完成
# ============================
echo ""
echo "🎉 开发环境安装完成！"
echo ""
echo "📌 下一步建议："
echo "1. 重启终端，使环境变量生效（GOPATH, JAVA_HOME 等）"
echo "2. 运行 'code .' 测试 VS Code"
echo "3. 运行 'go version' / 'node -v' / 'python3 --version' 验证安装"
echo "4. 使用 'podman run hello-world' 测试容器"
echo ""
echo "💡 你的系统现在支持："
echo "   - 全栈开发（Web、API、数据库）"
echo "   - 高性能编译（C/C++、Rust）"
echo "   - 容器化部署（Podman/Docker）"
echo "   - 多语言支持（Python/Go/Java/JS/Rust）"
echo ""
echo "祝你编码愉快！🚀"
echo ""

exit 0
